package com.shuang.stackAndQueue3;

import java.util.Stack;

public class IsValid {

    public boolean isValid(String s) {
        //利用栈 匹配到左括号时让右边先入栈 这样右边括号来的时候直接判断跟栈顶元素是否匹配即可

        //定义栈
        Stack<Character> stack = new Stack();

        //遍历字符串 左括号匹配时 存右括号 右括号匹配时 弹出去 循环结束 栈为空则返回true
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '(') {
                stack.push(')');
            } else if (ch == '{') {
                stack.push('}');
            } else if (ch == '[') {
                stack.push(']');
                //右括号进来 如果栈已经空了说明右括号多了 如果元素跟栈顶不匹配说明括号位置不匹配
            } else if (stack.isEmpty() || stack.peek() != ch) {
                return false;
            } else {
                //右括号匹配将栈顶的右括号弹出
                stack.pop();
            }
        }

        //遍历结束，如果栈为空，则括号全部匹配
        return stack.isEmpty();
    }
}
